RxSwiftでカウントアップするサンプル
この記事の背景
「RxSwift??(聞いたことはあるけど...)」みたいな状態だったところから、少し理解が進んできたので、初学者向けに記事を書いてみました。 本記事は、RxSwift という名前を聞いたことがあり、どんなことができるか知りたいという方向けの内容です。RxSwift を使って、ボタンを押すとカウントアップするプログラムを組んでみました。なお、リアクティブプログラミングの詳しい解説は行いません。
簡単なサンプルプログラムの実装
- 今回はハートボタン(favButton)が押されるとカウント回数表示(favCountLabel)が上がるサンプルアプリを作っていきます。
- この機能だけの場合、IBActionを使って実装した方が簡単なのですが、解説のためRxSwiftを使っていきます。
ライブラリのインストール
Cocoapodsを使用してRxSwiftとRxCocoaの2つをインストールします。 RxCocoaはUIKitを使う時に必要なので、セットでインストールしましょう。
pod 'RxSwift' pod 'RxCocoa'
画面の作成
プログラムの内容
import UIKit import RxSwift import RxCocoa class ViewController: UIViewController { @IBOutlet weak var favCountLabel: UILabel! @IBOutlet weak var favButton: UIButton! private var favCount = 0 private let disposeBag = DisposeBag() override func viewDidLoad() { super.viewDidLoad() favButton.rx.tap .subscribe(onNext: {[unowned self] _ in self.favCount += 1 self.favCountLabel.text = String(self.favCount) }) .disposed(by: disposeBag) } }
ハートをタップしてカウントが上昇していれば成功です。
プログラムの解説
- 「rx.tap」はUIButtonに用意されている、ボタンがタップされたことを通知してくれるObservableです。
- 「subscribe」は文字通り購読の意味で、対象に変化があった時に呼ばれます。今回はfavButtonがtapされる時。
- 「onNext」はイベントが通常通りであるたびに通知します。他にもエラー時に通知するonError、完了時に通知するonCompletedがあります。
- 「disposed」は購読の解除です。onNextの場合は、イベント後も購読が継続するため、メモリーリークになる恐れがあります。なのでdisposedで開放してあげる必要があります。
最後に
今回は簡単なサンプルアプリを通してRxSwiftについて解説していきました。 どなたかの参考になれば幸いです。